package top.frsf.context;

import top.frsf.starter.Starter;
import top.frsf.starter.impl.*;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author FRSF
 * @since 2025/8/1 15:31
 */
public class StarterContext {
    /**
     * 启动器列表
     */
    private static final List<Starter> starters = new ArrayList<>();

    /**
     * 构造函数
     */
    public StarterContext() {
        // add
        starters.add(new EnvStarter());
        starters.add(new CardStarter());
        starters.add(new PlantStarter());
        starters.add(new ZomStarter());
        starters.add(new BulletStarter());
        starters.add(new HomeStarter());
        // init
        starters.forEach(Starter::init);
    }

    /**
     * 获取指定类型的启动器
     *
     * @param clazz 启动器类
     * @return 启动器实例
     */
    public <T extends Starter> T getStarter(Class<T> clazz) {
        for (Starter starter : starters) {
            if (clazz.isInstance(starter)) {
                return clazz.cast(starter);
            }
        }
        throw new RuntimeException("启动器 " + clazz.getName() + " 不存在");
    }

    /**
     * 启动所有启动器
     *
     * @param graphics 画布
     */
    public void run(Graphics graphics) {
        for (Starter starter : starters) {
            starter.start(graphics);
        }
    }
}
